package student.aistar.service;

import com.github.pagehelper.PageInfo;
import student.aistar.model.dto.GenerateOrderDTO;
import student.aistar.model.dto.OrderAndOrderDetailDTO;
import student.aistar.model.entity.*;

import java.util.List;

/**
 * @Description:
 * @Auther: zhugefeng
 * @Date:2021/9/27 20:32
 **/
public interface IOrderService {
    /*
     *功能描述:根据用户名查询用户id
     * @date 2021/9/27
     * @param username
     * @return student.aistar.model.entity.User
     */
    User getUserByName(String username);
    /*
     *功能描述:根据用户id查询订单
     * @date 2021/9/27
     * @param userId
     * @return student.aistar.model.entity.Orders
     */
    List<Orders> getOrderByUser(Integer userId);

    /*
     *功能描述:根据订单id查询订单详情
     * @date 2021/9/27
     * @param orderId
     * @return java.util.List<student.aistar.model.entity.Orderdetail>
     */
    List<Orderdetail> getOrderDetail(Integer orderId);

    /*
     *功能描述:根据订单id查询订单
     * @date 2021/10/1
     * @param orderId
     * @return student.aistar.model.entity.Orders
     */
    Orders getOrdersByOrderId(Integer orderId);

    /*
     *功能描述:根据地址id查询地址
     * @date 2021/10/1
     * @param addressId
     * @return student.aistar.model.entity.Address
     */
    Address getAddressByAddressId(Integer addressId);


    /*
     *功能描述:查询订单的所有状态
     * @date 2021/10/5
     * @param
     * @return java.util.List<student.aistar.model.entity.OrderStatus>
     */
    List<OrderStatus> getAllOrderStatus();

    /*
     *功能描述:多条件查询订单
     * @date 2021/10/5
     * @return com.github.pagehelper.PageInfo<student.aistar.model.entity.Orders>
     */
    PageInfo<Orders> getOrderByNameStatus(Long orderNumber,Integer orderStatus,Integer userId,Integer pageNum, Integer pageSize);

    /*
     *功能描述:删除订单,将订单状态修改为3
     * @date 2021/10/5
     * @param orderId
     * @return int
     */
    int delOrderlById(Integer orderId);

    /**
     * 确认购买的时候产生订单信息
     * @param orders
     * @return
     */
    int insertOrdersComeCart(Orders orders);

    /**
     * 确认购买的似乎产生订单详情信息
     * @param orderdetail
     */
    void insertOrderDetailFormCart(Orderdetail orderdetail);

    OrderAndOrderDetailDTO generateOrder(String paraCartProduct, Integer indexAddress, User user);

    OrderAndOrderDetailDTO goToBuy(User user, Integer orderId);


    /**
     * 支付成功后订单状态置为2
     * @param orderNumber
     */
    void updateOrdersStatus(Long orderNumber);

    /**
     * 未支付订单状态设置为3
     * @param orderNumber
     */
    void updateOrdersStatusDead(Long orderNumber);

    /**
     * 根据订单号查看某个订单的状态
     * @param orderNumber
     * @return
     */
    int selectOrdersStatus(Long orderNumber);



}
